package com.five.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.five.pojo.entity.Order;
import com.five.pojo.entity.OrderItem;
import com.five.pojo.vo.OrderDetailVO;
import com.five.pojo.vo.OrderListVO;

import java.util.List;

public interface CommonOrderService {
    /**
     * 创建订单（包含订单主表和明细表）
     * @param order 订单主信息
     * @param orderItems 商品明细列表
     * @return 生成的订单编号
     */
    String createOrder(Order order, List<OrderItem> orderItems);

    /**
     * 根据订单ID查询订单详情（包含商品明细）
     * @param orderId 订单ID
     * @return 订单详情VO
     */
    OrderDetailVO getOrderDetail(Long orderId);

    /**
     * 根据订单ID查询订单详情（包含商品明细）
     * @param orderNo 订单编号
     * @return 订单详情VO
     */
    OrderDetailVO getOrderDetailByNo(String orderNo);

    /**
     * 取消订单（仅待付款状态可取消）
     * @param orderId 订单ID
     * @param cancelReason 取消原因
     * @return 是否取消成功
     */
    boolean cancelOrder(Long orderId, String cancelReason);

    /**
     * 订单支付
     * @param orderNo 订单编号
     * @param payType 支付方式
     * @return 是否支付成功
     */
    boolean payOrder(String orderNo, Integer payType);

    /**
     * 确认收货（更新订单状态为已完成，记录收货时间）
     * @param orderId 订单ID
     * @return 是否确认成功
     */
    boolean confirmReceive(Long orderId);

    /**
     * 查询用户的订单列表
     * @param userId 用户ID
     * @param pageNum 页码
     * @param pageSize 每页条数
     * @return 订单列表VO（分页）
     */
    Page<OrderListVO> getUserOrders(Long userId, Integer pageNum, Integer pageSize);
}
